<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- 
        JavaScript专业的术语ECMAScript，ECMA（欧洲计算机制造商协会）指定和发布脚本语言的规范
        JavaScript ES5
        ES6
        ES7
        ES8
        ES9
        ES10  2019更新


        ES6 泛指后面所有的更新的内容

     -->
     <button class="btn1">btn1</button>
     <button class="btn2">btn2</button>
     <button class="btn3">btn3</button>
     <!-- <button class="btn1">btn1</button> -->
    <script>
        // var b;
        console.log(b);//?undefined  变量提升产生的
        var a = 123;
        var b = 'fef';
        var obj = {
            name: 'tom'
        }
        var a = '846153';
        // var声明变量当重复声明时 就会覆盖掉，使用最新的
        console.log(a);//?
        // console.log(aa);//报错
        let aa = '4651';
        // let aa = '瑞土';
        console.log(aa);
         /* 换为let const 都是用来声明变量，替代了var
          let用来声明变量，不能重复声明，不会变量提升，不会预处理，具有块级作用域
      */
        let btnArr = document.querySelectorAll('button');
        for(let i=0;i<btnArr.length;i++){
            btnArr[i].onclick = function(){
                console.log(i);
            }
        }

        // 什么是js事件循环机制 event loop
        // 先执行同步代码 遇见异步代码放到异步任务队列中
        // 你学过的异步代码有哪些 
        //  异步宏任务 定时器 ajax  script i/o DOM绑定的事件     
        // 异步微任务  promise
        // 先执行微任务队列中的代码，在执行宏任务队列中的代码

        // const 声明常量 不变化的量叫做常量
        let d = 123;
        d++;
        const bc = 123;
        // bc = bc + 1;
        console.log(bc);
        /* 引用数据类型 */
        const objA = {
            name:'tom',
            age:10
        }
        objA.name = 'xiaowangzi';
        console.log(objA);

        // 数据类型：
        /* 
        基本数据类型：number  Boolean string null undefined  Symbol BigInt
        引用数据类型：object

        
        */
       const arr = [1,2,3];
       arr[0] = 10;
       console.log(arr);
    //    const用来声明一个常量，即不变化的值，定义后不能修改，其他特点与let相同
    // 注：对象的属性修改和数组元素的变化不会发出const错误。
    // 声明对象类型时使用const，非对象类型多用let
    </script>
</body>

</html>